package per.ethan.cloud.common.config;

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

/**
 * @author Ethan
 * @date 2020/03/12 10:44
 *
 * 负载均衡策略:
 * 1、RoundRobinRule              轮询，默认策略
 * 2、RandomRule                  随机
 * 3、RetryRule                   先按照轮询策略获取服务，如果获取服务失败则在指定时间内会进行重试，获取可用的服务
 * 4、WeightedResponseTimeRule    对轮询策略的扩展，响应速度越快的实例选择权重越大，越容易被选择
 * 5、BestAvailableRule           会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务，然后选择一个并发量最小的服务
 * 6、AvailabilityFilteringRule   先过滤掉故障实例，再选择并发较小的实例
 * 7、ZoneAvoidanceRule           默认规则，符合判断server所在区域的性能和server的可用性选择服务器
 *
 * 轮询算法：rest接口第几次请求数 % 服务器集群总数量 = 实际调用服务器的下标，每次服务重启后次数从1开始
 */
@Configuration
public class RibbonConfig {

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

}
